"""
第5周作业：
随机生成一个字符串：
1 字符串是由 数字和大小写字母组成
2 不含特殊符号
3 可以指定生成几位
请设计出对应的函数
给定一个只包含大小写字母，数字的字符串，对其进行排序，保证：
s = "Sorting1234"
1 所有的小写字母在大写字母前面
2 所有的字母在数字前面
3 所有的奇数在偶数前面
请设计出对应的函数
"""

import random
import string


def genpass(length):
    src_digits = string.digits  # string_数字  '0123456789'
    src_uppercase = string.ascii_uppercase  # string_大写字母 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    src_lowercase = string.ascii_lowercase  # string_小写字母 'abcdefghijklmnopqrstuvwxyz'
    # sample从序列中选择n个随机独立的元素，返回列表
    num = random.sample(src_digits, 1)  # 随机取1位数字
    lower = random.sample(src_uppercase, 1)  # 随机取1位小写字母
    upper = random.sample(src_lowercase, 1)  # 随机取1位大写字母
    other = random.sample(string.ascii_letters + string.digits, length - 3)  # 随机取4位
    # 生成字符串
    # print(num, lower, upper, other)
    pwd_list = num + lower + upper + other
    # shuffle将一个序列中的元素随机打乱，打乱字符串
    random.shuffle(pwd_list)
    # 列表转字符串
    password_str = ''.join(pwd_list)
    print(password_str)


genpass(8)

s = "Sorting1234"


def sort_str(x):  # x 传入的每个元素
    if x.isdigit():
        if int(x) % 2 == 0:
            return 4, x  # 返回的是元祖，元祖可进行排序
        return 3, x
    elif x.islower():
        return 0, x
    elif x.isupper():
        return 1, x


li = sorted(s, key=sort_str)
# ['g', 'i', 'n', 'o', 'r', 't', 'S', '1', '3', '2', '4']
string = ''.join(li)
print(string)
